package util

import (
	"reflect"
	"strings"

	validator "gopkg.in/go-playground/validator.v8"
)

var validMap = map[string]string{
	"required": "是必填项,不允许为空！",
	"email":    "格式错误，请输入有效Email！",
	"numeric":  "格式错误，请填写有效数字",
	"number":   "格式错误，请输入有效数字！",
	"len":      "最大长度为##！",
}

//解析gin binding/validate返回的错误
//需要验证的字段 Tag 要有 title
// err 已验证出的错误
// i   验证的struct结构
func GetValidMsg(err error, i interface{}) string {
	var msg = ""

	if err != nil {
		errs := err.(validator.ValidationErrors)
		t := reflect.TypeOf(i)
		for _, e := range errs {
			//e.Kind //数据类型 String
			f, _ := t.FieldByName(e.Field)
			m := f.Tag.Get("title")
			if m == "" {
				msg += e.Field + validMap[e.Tag]
			} else {
				msg += m + validMap[e.Tag]
			}
			if strings.Index(msg, "##") >= 0 {
				msg = strings.Replace(msg, "##", e.Value.(string), 1)
			}
		}
	} else {
		msg = "数据验证失败!"
	}

	return msg
}
